home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 684 / 684.xpi / chrome / fireftp.jar / content / js / dialogs / accountManager.js next >
Text File  |  2009-06-15  |  12KB  |  384 lines

  1. var gStrbundle;
  2. var gAnonymous;
  3. var gArgs;
  4. var gSite;
  5. var gSiteManager;
  6. var gCallback;
  7. var gCancelCallback;
  8. var gAutoAccount = false;
  9. var gOrigAccount;
  10.  
  11. function init() {
  12.   setTimeout(window.sizeToContent, 0);
  13.  
  14.   gStrbundle                  = $("strings");
  15.   gArgs                       = window.arguments[0];
  16.   gSite                       = window.arguments[0].site;
  17.   gOrigAccount                = window.arguments[0].site.account;
  18.   gSiteManager                = window.arguments[0].siteManager;
  19.   gCallback                   = window.arguments[0].callback;
  20.   gCancelCallback             = window.arguments[0].cancelCallback;
  21.   gAnonymous                  = gSite.anonymous;
  22.  
  23.   gSite.timezone              = gSite.timezone ? gSite.timezone : 0;
  24.  
  25.   createFolders();
  26.  
  27.   $('account').value          = gSite.account;
  28.   $('host').value             = gSite.host;
  29.   $('port').value             = gSite.port;
  30.   $('login').value            = gSite.login;
  31.   $('password').value         = gSite.password;
  32.   $('anonymous').checked      = gAnonymous;
  33.   $('login').disabled         = gAnonymous;
  34.   $('password').disabled      = gAnonymous;
  35.   $('security').value         = gSite.security   || "";
  36.   $('pasvmode').checked       = gSite.pasvmode;
  37.   $('ipmode').checked         = gSite.ipmode;
  38.   $('webhost').value          = gSite.webhost    || "";
  39.   $('prefix').value           = gSite.prefix     || "";
  40.   $('localdir').value         = gSite.localdir;
  41.   $('remotedir').value        = gSite.remotedir;
  42.   $('treesync').checked       = gSite.treesync;
  43.   $('encoding').setAttribute("label", gSite.encoding || "UTF-8");
  44.   $('notes').value            = gSite.notes      || "";
  45.   $('timezoneHours').value    = parseInt(gSite.timezone / 60);
  46.   $('timezoneMinutes').value  = gSite.timezone - parseInt(gSite.timezone / 60) * 60;
  47.   $('folder').value           = gSite.folder     || "";
  48.   $('privatekey').value       = gSite.privatekey || "";
  49.  
  50.   onPassiveChange();
  51.   onSftpChange();
  52.  
  53.   initialDirChange();
  54.  
  55.   $('host').focus();
  56.  
  57.   if (!$('account').value && !gArgs.quickConnect) {
  58.     gAutoAccount = true;
  59.   }
  60.  
  61.   if (gArgs.quickConnect) {                                // this is a QuickConnect, no data saved, put a Connect button in place of an Ok button
  62.     $('accountrow').collapsed                      = true;
  63.     $('accountManager8').getButton("accept").label = gStrbundle.getString("connectButton");
  64.     document.title                                 = gStrbundle.getString("quickConnect");
  65.   }
  66.  
  67.   if (!gArgs.quickConnect && gSite.temporary) {
  68.     $('accountManager8').getButton("accept").label = gStrbundle.getString("saveTempAccount");
  69.     $('accountManager8').getButton("extra2").collapsed = true;
  70.   } else if (gSite.account) {
  71.     $('accountManager8').getButton("extra2").label = gStrbundle.getString("delete");
  72.     $('accountManager8').getButton("extra2").setAttribute("onclick", "doDelete()");
  73.   } else {
  74.     $('accountManager8').getButton("extra2").collapsed = true;
  75.   }
  76. }
  77.  
  78. function createFolders() {
  79.   var folders = new Array();
  80.  
  81.   for (var x = 0; x < gSiteManager.length; ++x) {
  82.     var found = false;
  83.     gSiteManager[x].folder = gSiteManager[x].folder || "";
  84.  
  85.     for (var y = 0; y < folders.length; ++y) {
  86.       if (gSiteManager[x].folder == folders[y]) {
  87.         found = true;
  88.         break;
  89.       }
  90.     }
  91.  
  92.     if (!found && gSiteManager[x].folder != "") {
  93.       folders.push(gSiteManager[x].folder);
  94.     }
  95.   }
  96.  
  97.   folders.sort();
  98.  
  99.   for (var x = 0; x < folders.length; ++x) {
  100.     $('folder').appendItem(folders[x], folders[x]);
  101.   }
  102. }
  103.  
  104. function autoAccount() {
  105.   if (gAutoAccount) {
  106.     $('account').value = $('host').value;
  107.   }
  108. }
  109.  
  110. function autoAccountDisable() {
  111.   gAutoAccount = false;
  112. }
  113.  
  114. function useCurrentLocal() {
  115.   $('localdir').value  = gArgs.localPath.value;
  116.   initialDirChange();
  117. }
  118.  
  119. function useCurrentRemote() {
  120.   $('remotedir').value = gArgs.remotePath.value;
  121.   initialDirChange();
  122. }
  123.  
  124. function anonymousChange() {
  125.   gAnonymous             = !gAnonymous;
  126.   $('login').disabled    =  gAnonymous;
  127.   $('password').disabled =  gAnonymous;
  128.   $('login').value       =  gAnonymous ? "anonymous"           : "";
  129.   $('password').value    =  gAnonymous ? "fireftp@example.com" : "";
  130. }
  131.  
  132. function initialDirChange() {
  133.   $('treesync').disabled = !$('localdir').value || !$('remotedir').value;
  134.  
  135.   if ($('treesync').disabled) {
  136.     $('treesync').checked = false;
  137.   }
  138. }
  139.  
  140. function onPassiveChange() {
  141.   $('security').disabled = !$('pasvmode').checked;
  142. }
  143.  
  144. function onSecurityChange() {
  145.   $('port').value       = $('security').value == "ssl" ? 990 : ($('security').value == "sftp" ? 22 : 21);
  146.   onSftpChange();
  147. }
  148.  
  149. function onSftpChange() {
  150.   $('pasvmode').disabled           = $('security').value != "";
  151.   $('ipmode').disabled             = $('security').value == "sftp";
  152.   $('privatekeylbl').disabled      = $('security').value != "sftp";
  153.   $('privatekey').disabled         = $('security').value != "sftp";
  154.   $('privatekeyBrowse').disabled   = $('security').value != "sftp";
  155.   $('privatekeyConvert').disabled  = $('security').value != "sftp";
  156. }
  157.  
  158. function privateKeyBrowse() {
  159.   var nsIFilePicker   = Components.interfaces.nsIFilePicker;
  160.   var fp              = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
  161.   fp.defaultExtension = "ppk";
  162.   fp.appendFilter(gStrbundle.getString("privateKey") + " (*.ppk)", "*.ppk");
  163.   fp.init(window, null, nsIFilePicker.modeOpen);
  164.   var res = fp.show();
  165.  
  166.   if (res != nsIFilePicker.returnOK) {
  167.     return;
  168.   }
  169.  
  170.   $('privatekey').value = fp.file.path;
  171. }
  172.  
  173. function privateKeyConvert() {
  174.   var program = getExec();
  175.  
  176.   if (getPlatform() == "linux" && !program.exists()) {
  177.     doAlert(gStrbundle.getString("sftpLinuxNotFound"));
  178.     return;
  179.   }
  180.  
  181.   if (getPlatform() == "mac" && !program.exists()) {
  182.     doAlert(gStrbundle.getString("sftpMacNotFound"));
  183.     return;
  184.   }
  185.  
  186.   var arguments = new Array();
  187.  
  188.   var nsIFilePicker   = Components.interfaces.nsIFilePicker;
  189.   var fp              = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
  190.   fp.init(window, null, nsIFilePicker.modeOpen);
  191.   var res = fp.show();
  192.  
  193.   if (res != nsIFilePicker.returnOK) {
  194.     return;
  195.   }
  196.  
  197.   arguments.push(fp.file.path);
  198.  
  199.   if (getPlatform() == "linux" || getPlatform() == "mac") {
  200.     var passwordObject       = new Object();
  201.     passwordObject.returnVal = false;
  202.     var key;
  203.  
  204.     window.openDialog("chrome://fireftp/content/password2.xul", "password", "chrome,modal,dialog,resizable,centerscreen", passwordObject);
  205.  
  206.     if (passwordObject.returnVal) {
  207.       key = passwordObject.password;
  208.     } else {
  209.       return;
  210.     }
  211.  
  212.     var ipcService = Components.classes["@mozilla.org/process/ipc-service;1"].getService(Components.interfaces.nsIIPCService);
  213.     var outStrObj = {}; var outLenObj = {}; var errStrObj = {}; var errLenObj = {};
  214.     ipcService.execPipe(program.path + " " + fp.file.path + " -o " + fp.file.path + ".ppk", true, key, "", 0, [], 0, outStrObj, outLenObj, errStrObj, errLenObj);
  215.   } else {
  216.     var process = Components.classes['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess);
  217.     process.init(program);
  218.     process.run(getPlatform() == "linux", arguments, arguments.length, {});
  219.   }
  220. }
  221.  
  222. function getExec() {
  223.   if (getPlatform() == "windows") {
  224.     var exec = Components.classes["@mozilla.org/file/directory_service;1"].createInstance(Components.interfaces.nsIProperties)
  225.                          .get("ProfD", Components.interfaces.nsILocalFile);
  226.     exec.append("extensions");
  227.     exec.append("{a7c6cf7f-112c-4500-a7ea-39801a327e5f}");
  228.     exec.append("platform");
  229.     exec.append("WINNT_x86-msvc");
  230.     exec.append("puttygen.exe");
  231.  
  232.     return exec;
  233.   } else if (getPlatform() == "linux") {
  234.     var file = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
  235.     file.initWithPath("/usr/bin/puttygen");
  236.  
  237.     return file;
  238.   } else if (getPlatform() == "mac") {
  239.     var file = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
  240.     file.initWithPath("/opt/local/var/macports/software/putty");
  241.  
  242.     if (!file.exists()) {
  243.       return file;
  244.     }
  245.  
  246.     var subdirs = [];
  247.  
  248.     var entries = file.directoryEntries;                                       // find highest version number
  249.     while (entries.hasMoreElements()) {
  250.       subdirs.push(entries.getNext().QueryInterface(Components.interfaces.nsILocalFile));
  251.     }
  252.  
  253.     subdirs.sort(compareName);
  254.     subdirs.reverse();
  255.  
  256.     if (!subdirs.length) {
  257.       return file;
  258.     }
  259.  
  260.     file.append(subdirs[0].leafName);
  261.     file.append("opt");
  262.     file.append("local");
  263.     file.append("bin");
  264.     file.append("puttygen");
  265.  
  266.     return file;
  267.   }
  268. }
  269.  
  270. function getPlatform() {
  271.   var platform = navigator.platform.toLowerCase();
  272.  
  273.   if (platform.indexOf('linux') != -1) {
  274.     return 'linux';
  275.   }
  276.  
  277.   if (platform.indexOf('mac') != -1) {
  278.     return 'mac';
  279.   }
  280.  
  281.   return 'windows';
  282. }
  283.  
  284. function createMenu(node) {
  285.   var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
  286.   observerService.notifyObservers(null, "charsetmenu-selected", node);
  287. }
  288.  
  289. function chooseCharset(event) {
  290.   var node     = event.target;
  291.   var fromUTF8 = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].getService(Components.interfaces.nsIScriptableUnicodeConverter);
  292.  
  293.   try {
  294.     fromUTF8.charset = node.getAttribute('id');
  295.     $('encoding').setAttribute("label", node.getAttribute('id'));
  296.   } catch (ex) {
  297.     $('encoding').setAttribute("label", "UTF-8");
  298.   }
  299. }
  300.  
  301. function doDelete() {
  302.   if (!confirm(gStrbundle.getFormattedString("confirmDelete", [gSite.account]))) {
  303.     return;
  304.   }
  305.  
  306.   gSite.markedForDeath = true;
  307.   gCallback(gSite);
  308.  
  309.   $('accountManager8').cancelDialog();
  310. }
  311.  
  312. function trim(str) {
  313.   return str.replace(/^\s*/, "").replace(/\s*$/, "");
  314. }
  315.  
  316. function doOk() {
  317.   $('host').value = $('host').value.replace(/^http:\/*/, '');
  318.   $('host').removeAttribute('missing');
  319.   $('account').removeAttribute('missing');
  320.  
  321.   if ((!gArgs.quickConnect && $('account').value == "") || $('host').value == "") {
  322.     $('tabbox').selectedIndex = 0;
  323.  
  324.     if ($('host').value == "") {
  325.       $('host').setAttribute('missing', true);
  326.       $('host').focus();
  327.     }
  328.  
  329.     if (!gArgs.quickConnect && $('account').value == "") {
  330.       $('account').setAttribute('missing', true);
  331.       $('account').focus();
  332.     }
  333.  
  334.     return false;
  335.   }
  336.  
  337.   if (!gArgs.quickConnect && gOrigAccount != $('account').value) {
  338.     for (var x = 0; x < gSiteManager.length; ++x) {
  339.       if (gSiteManager[x].account == $('account').value) {
  340.         $('account').setAttribute('missing', true);
  341.         $('account').select();
  342.         alert(gStrbundle.getString("dupAccount"));
  343.         return false;
  344.       }
  345.     }
  346.   }
  347.  
  348.   gSite.account          = $('account').value;
  349.   gSite.host             = trim($('host').value);
  350.   gSite.port             = $('port').value;
  351.   gSite.login            = trim($('login').value);
  352.   gSite.password         = $('password').value;
  353.   gSite.anonymous        = $('anonymous').checked;
  354.   gSite.security         = $('security').value;
  355.   gSite.pasvmode         = $('pasvmode').checked;
  356.   gSite.ipmode           = $('ipmode').checked;
  357.   gSite.webhost          = trim($('webhost').value);
  358.   gSite.prefix           = $('prefix').value;
  359.   gSite.localdir         = $('localdir').value;
  360.   gSite.remotedir        = $('remotedir').value;
  361.   gSite.treesync         = $('treesync').checked;
  362.   gSite.encoding         = $('encoding').getAttribute("label");
  363.   gSite.notes            = $('notes').value;
  364.   gSite.timezone         = (parseInt($('timezoneHours').value) * 60) + parseInt($('timezoneMinutes').value);
  365.   gSite.folder           = $('folder').value;
  366.   gSite.privatekey       = $('privatekey').value;
  367.  
  368.   if (!gArgs.quickConnect && gSite.temporary) {
  369.     gSite.temporary      = false;
  370.   }
  371.  
  372.   gCallback(gSite);
  373.  
  374.   return true;
  375. }
  376.  
  377. function doCancel() {
  378.   if (gCancelCallback) {
  379.     gCancelCallback();
  380.   }
  381.  
  382.   return true;
  383. }
  384.